//定义函数的方式
//1.函数声明方式 function 关键字 (命名函数)
function fun() {};
//2.函数表达式 (匿名函数)：
let func = function() {};
//3 Function 生成对象 let fn = new Function('参数1', '参数2', '函数体');
let fn = new Function('a', 'b', 'console.log(a+b);');
// fn(1, 2)    //3
/*
Function 里面参数都必须是字符串格式
第三种方式执行效率低，也不方便书写，因此较少使用
所有函数都是 Function 的实例化对象
函数也属于对象
Function 方式效率低，操作麻烦，作了解
 */
console.log(fn instanceof Object); //true
//因此函数也是对象   也有 .__proto__



//调用方式
//1. 普通函数：直接加括号，fn()  或 fn.call()
//2. 对象的方法：加小数点方式， obj.fn()
//3. 构造函数：new 构造函数
//4. 绑定事件函数：触发相应事件，例如 click 点击触发函数
//5. 定时器函数：setInterval，每隔一段时间调用函数
//6. 立即执行函数：(function() {})()，自动调用，直接执行\\\


// 调用方式        this 指向
// 普通函数        window
// 构造函数        实例对象，原型对象里面的方法也指向实例对象
// 对象的方法      该方法所属对象
// 绑定事件函数    绑定事件对象
// 定时器函数      window
// 立即执行函数    window